#ifndef prs_FrmIntegerStyle_H
#define prs_FrmIntegerStyle_H

#include "prs_FrmFunc.h"
#include "prs_FrmRules.h"
#include "prs_FrmFont.h"
#include "prs_FrmFiller.h"
#include "frm_control_TInteger.h"

namespace prs {

///////////////////////////////////////////////////////////////////////////////

struct TNodeFrmIntegerStyle : public TNodeStyleControl
{
  DECLARE_ClientNode()
  TAttrNodeType<nodeType_Integer> NodeType;
  TAttrObject<nodeType_Style,frm::control::TInteger::TStyle> Style;
  //
  TNodeFrmIntegerStyle() : NodeType(this),Style(this) {}
};

///////////////////////////////////////////////////////////////////////////////

struct TRuleFrmIntegerStyleState : public snt::TRule
{
  TRuleFrmIntegerStyleState(
    snt::text::TContext &Context,
	svl::TVariant &VParentNode,
    svl::TVariant &VState
  );
  
private:  
  frm::control::TInteger::TStyle::TState *GetState() {
    return dynamic_cast<frm::control::TInteger::TStyle::TState*>(vState.Pointer()); 
  }
  //
  void FFont  (snt::TParams &Params) { vFont   = &GetState()->Font;}
  void FFiller(snt::TParams &Params) { vFiller = &GetState()->Filler;}
  //
  svl::TVariant &vState,vFont,vFiller;
  snt::TAlter A;
  TRuleFrmFont RFont;
  TRuleFrmFiller RFiller;
  svl_Except;
};

///////////////////////////////////////////////////////////////////////////////

struct TRuleFrmIntegerStyle : public snt::TRule
{
  TRuleFrmIntegerStyle(
    snt::text::TContext &Context,
    svl::TVariant &VParentNode
  );
  
private:  
  TNodeFrmIntegerStyle *GetNode() { return dynamic_cast<TNodeFrmIntegerStyle*>(vParentNode.Pointer());}
  //
  void FNormal (snt::TParams &Params) { vState = &GetNode()->Style.Value.Normal;}
  void FFocused(snt::TParams &Params) { vState = &GetNode()->Style.Value.Focused;}
  //
  svl::TVariant &vParentNode,vState;
  snt::TAlter A;
  TRuleFrmIntegerStyleState RState;
  svl_Except;
};

///////////////////////////////////////////////////////////////////////////////
}

#endif
